package learn.java.basic.net;

import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.DatagramSocketImpl;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.SocketException;

@Slf4j
public class LocalDatagramSocketServer implements LocalServer {
    private DatagramSocket datagramSocket;

    @Override
    public void start() {

    }

    @Override
    public void stop() {

    }

    public static void main(String[] args) throws IOException {

        SocketAddress socketAddress = new InetSocketAddress(InetAddress.getByName("192.168.96.100"), 20002);
        //1,创建udp socket服务对象。绑定一个指定的端口。给该应用程序分配一个数据标示。也可以称之为监听一个端口。
        DatagramSocket ds = new DatagramSocket(socketAddress);

        //2,创建数据包，用于存储接收到的数据，并用数据包对象的方法对数据包中的内容进行解析。
        byte[] buf = new byte[65535];
        DatagramPacket dp = new DatagramPacket(buf,buf.length);
        File file = File.createTempFile("19111",".txt");
        FileOutputStream out = new FileOutputStream(file);
        System.out.println(file.getAbsolutePath());
        while(true){

            //3,使用socket对象的receive方法将接收到的数据都存储到数据包的对象中。
            ds.receive(dp);//阻塞式方法。
            //获取数据内容。
            byte[] data = dp.getData();
            System.out.println(dp.getLength());
            //写入对应的文件中
            out.write(data,0,dp.getLength());
//            if(data.length>dp.getLength()){//结束条件，当数据的长度小于接受数组的长度时，说明已是最后一次，故结束循环
//                break;
//
//            }
        }
        //5,关闭资源。
//        ds.close();
    }

}
